home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Ham Radio 2000
/
Ham Radio 2000.iso
/
ham2000
/
packet
/
terminal
/
top_152
/
src152.exe
/
rar
/
TOP.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1995-05-16
|
7KB
|
252 lines
{┌─────────────────────────────────────────────────────────────────────────┐}
{│ │}
{│ T. O. P. │}
{│ │}
{│ (T)he (O)ther (P)acket │}
{│ │}
{│ Primaryfile: T O P . P A S │}
{│ │}
{│ │}
{│ TOP ist eine Weiterentwicklung des schon bekannten Terminalprogramms │}
{│ THP 2.6 von DL1BHO . Es gelten auch hier die gleichen Kriterien wie │}
{│ bei THP. Das heißt: │}
{│ │}
{│ Programm und Quelltexte sind ausdruecklich PUBLIC DOMAIN, koennen also │}
{│ an jeden interessierten Funkamateur zur NICHT-KOMMERZIELLEN NUTZUNG │}
{│ weitergegeben werden. │}
{│ │}
{│ │}
{│ A C H T U N G : │}
{│ │}
{│ Dieses Programm ist ein reines Hobby-Produkt! │}
{│ │}
{│ Für Fehler, insbesondere für eventuelle Datenverluste, kann │}
{│ KEINERLEI HAFTUNG übernommen werden! │}
{│ │}
{│ │}
{│ │}
{│ │}
{│ Compiliert wird mit TURBO-PASCAL 6.0 │}
{│ │}
{└─────────────────────────────────────────────────────────────────────────┘}
PROGRAM Packet_HOSTMODE_Terminal(Input,Output);
{$M 22000,0,655360}
{$F+}
USES OVERLAY,
CRT,
DOS,
TOPEMS,
TOPXMS,
TOPDEFS,
TOPACT,
TOPACT1,
TOPOVR,
TOPOVR1,
TOPOVR2,
TOPOVR3,
TOPOVR4;
{$O TOPOVR}
{$O TOPOVR1}
{$O TOPOVR2}
{$O TOPOVR3}
{$O TOPOVR4}
Var i : Integer;
BEGIN (**** H A U P T P R O G R A M M ****)
Check_TOP_Loaded;
Old_IntMask := Port[$21];
Inline($FA);
FillChar(neue_Table,SizeOf(neue_Table),$FF);
alte_Table := Ptr(PrefixSeg,$18);
move(alte_Table^[1],neue_Table[1],20);
TabAdresse := Ptr(PrefixSeg,$34);
TabAdresse^ := @neue_Table[1];
TabLaenge := Ptr(PrefixSeg,$32);
TabLaenge^ := maxTable;
Inline($FB);
SysPfad := UpCaseStr(ParamStr(0)); { Pfad für Config-Dateien }
OvrDatei := SysPfad;
While (length(SysPfad) > 0) and (SysPfad[length(SysPfad)] <> BS)
do delete(SysPfad,length(SysPfad),1);
if (Length(SysPfad) > 0) and (SysPfad[Length(SysPfad)] <> BS)
then SysPfad := SysPfad + BS;
Sys1Pfad := SysPfad;
OvrInit(OvrDatei);
if OvrResult <> 0 then
begin
Writeln;
Writeln('Failure with ',OvrDatei,' !');
PRG_Stoppen(0);
end;
ParamZeile := Ptr(PrefixSeg,$80);
UebergabeAuswert;
if Nutze_XMS then Init_XMS;
if Nutze_EMS then Init_EMS;
if Nutze_EMS and OVRtoEMS then
begin
OvrInitEMS;
i := OvrResult;
if i = 0 then Mstr := EmsStr + OvrDatei + B1 + 'load into EMS'
else Mstr := EmsStr + OvrDatei + B1 + 'F-Nr.' + GL + int_str(i);
end;
OrigExit := ExitProc;
ExitProc := @TOP_Exit;
FreeRam := $A0000 - Adr_absolut(Ptr(PrefixSeg,0));
GetMem(G,SizeOf(G^));
FillChar(G^,SizeOf(G^),0);
CheckBreak := false; { kein Abbruch durch ctrl-C }
GetCBreak(BreakStatus); { Break-Status holen und retten }
SetCBreak(false); { Break off }
CheckSnow := false;
GetVideoMode;
StartVideoMode := LastMode; { derzeitigen VideoMode merken }
LastModeStore := StartVideoMode;
if Hercules then maxZ := 25
else maxZ := WindMax div 256 + 1;
Cursor_aus;
TextAttr := StartColor;
ClrScr;
GenCrcTab;
if CRC_PR_EXE then
begin
NormVideo;
ClrScr;
SetzeCursor(1,25);
Mstr := ParamStr(0);
CRC_Datei(Mstr);
Writeln(Mstr);
Writeln;
PRG_Stoppen(0);
end;
Var_Init(99); { Erstmal nur globale Variablen initialisieren }
Assign(G^.BootFile,Sys1Pfad + BootDatei);
FiResult := RewriteTxt(G^.BootFile);
Writeln(G^.BootFile,'Version',B1 + GL + B1 + Version);
Writeln(G^.BootFile,'Last Edit at' + B1 + LastEdit);
Writeln(G^.BootFile,'OVR' + DP + B1 + OvrDatei);
if Mstr > '' then Writeln(G^.BootFile,Mstr);
Cursor_aus;
Emblem_zeigen;
ConfigLesen;
Infos_Lesen;
Strings_Lesen;
Merker_Conn_Lesen;
Merker_File_Lesen;
Fenster_Berechnen;
AttributFile_Lesen;
ESC_Lesen;
QRG_Lesen;
REM_Lesen;
PWD_Lesen;
HELP_Lesen;
MAK_Lesen;
if (SSAV > 0) then Puffer_lesen;
max_path_ermitteln;
Switch_VGA_Mono;
ColorItensity(HighCol);
maxZ := WindMax div 256 + 1;
Cursor_aus;
show := 0;
for i := 1 to 4 do StatusOut(0,1,i,Attrib[9],ConstStr(B1,20));
Neu_Bild;
VorCurEnd;
M_aus(Attrib[28],^J);
FiResult := ResetTxt(G^.BootFile);
While not Eof(G^.BootFile) do
begin
Readln(G^.BootFile,Mstr);
M_aus(Attrib[28],Star + Mstr + ^J);
end;
M_aus(Attrib[28],^J);
FiResult := CloseTxt(G^.BootFile);
V24_Init;
Ini_Start_Tnc;
if MhKill then FillChar(MH^,SizeOf(MH^),0);
K[0]^.TncNummer := 1;
SwitchChannel(FirstConCh);
if Exists(G^.MakroPfad + AutoExecFile) then
begin
MakroInit;
Makro_aktivieren(G^.MakroPfad + AutoExecFile);
end;
Repeat (**** H A U P T S C H L E I F E ****)
Check_Keyboard;
Uhr_aus;
If Idle then
begin
if (Idle_TCount > 0) and (Idle_TMerk <> TimerTick) then
begin
Idle_TMerk := TimerTick;
dec(Idle_TCount);
end;
if Idle_Count > 0 then dec(Idle_Count);
if (Idle_TCount = 0) and ((Idle_Pos and (Idle_Count = 0)) or
(not Idle_Pos and (Idle_Count > 0))) then
begin
IdleDOS;
if Idle_Pos then Idle_Count := Idle_Anz;
end;
end;
if not Idle or
Idle and (Idle_Pos or
(not Idle_Pos and (Idle_Count = 0) and (Idle_TCount = 0))) then
begin
if Idle and not Idle_Pos then Idle_Count := Idle_Anz;
if polling then TNCs_Pollen;
set_Hardwarecursor(show);
end;
Until QRT; (* E N D E der H A U P T S C H L E I F E *)
TschuessFenster;
TncIni(1);
Abschluss_TOP;
Init_HardDrive;
ExitProc := OrigExit;
End.